1. Cos'è Python e perché impararlo?
Python è un linguaggio di programmazione interpretato creato da Guido van Rossum nel 1991. Il nome "Python" deriva dalla passione del creatore per i Monty Python, non dal serpente! Python si distingue per la sua sintassi chiara e leggibile, che lo rende ideale per chi inizia a programmare.
A differenza dei linguaggi compilati (come C o Java), Python non viene trasformato completamente in linguaggio macchina prima dell'esecuzione. L'interprete Python legge ed esegue il codice linea per linea, traduce le istruzioni e le esegue immediatamente. Questo rende lo sviluppo più veloce e interattivo, anche se l'esecuzione può essere leggermente più lenta rispetto ai linguaggi compilati.
Perché Python è così popolare?
- Leggibilità del codice: Python utilizza l'indentazione (spazi o tab) per definire i blocchi di codice, rendendo il programma visivamente chiaro e strutturato.
- Versatilità: Python viene utilizzato in molteplici ambiti: sviluppo web, data science, intelligenza artificiale, automazione, giochi, e molto altro.
- Ricchezza di librerie: Python ha migliaia di librerie pronte all'uso che estendono le sue funzionalità senza dover scrivere tutto da zero.
- Comunità attiva: Esiste una vasta comunità di sviluppatori pronti ad aiutare e condividere conoscenze.
- Multipiattaforma: Python funziona su Windows, macOS, Linux e altri sistemi operativi.
2. Il primo programma: "Hello, World!"
La tradizione nella programmazione vuole che il primo programma scritto in un nuovo linguaggio sia un semplice messaggio di saluto. In Python, questo è estremamente semplice:
print("Hello, World!")
La funzione print() è una funzione built-in (integrata) di Python che visualizza a schermo il contenuto che le passiamo tra le parentesi. In questo caso, stampa la stringa di testo "Hello, World!".
Prova a modificare il messaggio:
print("Benvenuto nel mondo di Python!")
print("Questo è il mio primo programma")
print("La programmazione è divertente!")
Output:
Benvenuto nel mondo di Python!
Questo è il mio primo programma
La programmazione è divertente!
3. Variabili: contenitori per i dati
Una variabile è un contenitore che conserva un valore in memoria. Immagina le variabili come delle scatole etichettate: ogni scatola ha un nome (l'etichetta) e contiene un valore (il contenuto della scatola).
Anatomia di una variabile
nome_variabile = valore
nome_variabile: identificatore univoco
= operatore di assegnazione
valore: il dato da memorizzare
Regole per i nomi delle variabili
- Possono contenere lettere (a-z, A-Z), numeri (0-9) e underscore (_)
- NON possono iniziare con un numero
- NON possono contenere spazi
- NON possono essere parole riservate di Python (come
if,for,while,class, ecc.) - Python è case-sensitive:
nome,NomeeNOMEsono tre variabili diverse
| Validi ✅ | Non validi ❌ | Motivo |
|---|---|---|
nome |
2nome |
Inizia con un numero |
eta_studente |
età studente |
Contiene spazio e carattere accentato |
prezzo_totale |
prezzo-totale |
Il trattino non è permesso |
risultato1 |
for |
Parola riservata di Python |
_valore_privato |
class |
Parola riservata di Python |
# Assegnare un numero intero
eta = 18
# Assegnare un numero decimale
altezza = 1.75
# Assegnare una stringa di testo
nome = "Marco"
# Assegnare un valore booleano (vero/falso)
iscritto = True
# Stampare le variabili
print(nome) # Output: Marco
print(eta) # Output: 18
print(altezza) # Output: 1.75
print(iscritto) # Output: True
Python è un linguaggio a tipizzazione dinamica. Questo significa che non è necessario dichiarare esplicitamente il tipo di dato di una variabile: Python lo deduce automaticamente dal valore assegnato. La stessa variabile può anche cambiare tipo durante l'esecuzione del programma:
x = 10 # x è un intero
x = "ciao" # ora x è una stringa
x = 3.14 # ora x è un float
4. Tipi di dati fondamentali
Python supporta diversi tipi di dati, ognuno con caratteristiche specifiche. I tipi fondamentali sono:
4.1 Numeri interi (int)
Gli interi rappresentano numeri senza parte decimale, sia positivi che negativi. Python gestisce automaticamente numeri interi di qualsiasi dimensione (limitati solo dalla memoria disponibile).
numero_positivo = 42
numero_negativo = -17
numero_grande = 1000000000000
zero = 0
4.2 Numeri decimali (float)
I float (floating point numbers) rappresentano numeri con la virgola decimale. In programmazione si usa il punto, non la virgola.
pi_greco = 3.14159
temperatura = -5.5
percentuale = 0.95
notazione_scientifica = 1.5e3 # equivale a 1500.0
I numeri float hanno una precisione limitata a causa di come vengono rappresentati in memoria. Operazioni su numeri decimali possono produrre risultati con piccole imprecisioni:
print(0.1 + 0.2) # Output: 0.30000000000000004
Per calcoli che richiedono precisione assoluta (come operazioni monetarie), esistono librerie apposite come decimal.
4.3 Stringhe (str)
Le stringhe rappresentano sequenze di caratteri, ovvero testo. Si possono definire usando virgolette singole (') o doppie ("), o triple virgolette per stringhe su più righe.
# Stringhe con virgolette singole o doppie
messaggio1 = 'Ciao a tutti'
messaggio2 = "Python è fantastico"
# Stringhe su più righe
testo_lungo = """Questa è una stringa
che si estende su
più righe"""
# Caratteri speciali
saluto = "Ciao,\ncome stai?" # \n crea una nuova riga
percorso = "C:\\Users\\Documents" # \\ rappresenta un backslash
Non c'è differenza funzionale tra virgolette singole e doppie. È una questione di stile e comodità. Se la tua stringa contiene virgolette, puoi usare l'altro tipo per evitare di doverle "escaped":
frase1 = "L'Italia è bella" # comodo con l'apostrofo
frase2 = 'Lui disse: "Ciao"' # comodo con le virgolette
4.4 Booleani (bool)
I booleani rappresentano valori di verità: possono essere solo True (vero) o False (falso). Sono fondamentali per il controllo del flusso del programma.
maggiorenne = True
piove = False
ha_patente = True
# I booleani sono spesso il risultato di confronti
risultato = 5 > 3 # True
uguale = 10 == 20 # False
Per scoprire il tipo di dato di una variabile, Python fornisce la funzione type():
x = 42
print(type(x)) # Output: <class 'int'>
y = 3.14
print(type(y)) # Output: <class 'float'>
z = "Hello"
print(type(z)) # Output: <class 'str'>
w = True
print(type(w)) # Output: <class 'bool'>
5. Commenti: documentare il codice
I commenti sono porzioni di testo che l'interprete Python ignora completamente. Servono a spiegare il codice agli esseri umani (incluso te stesso nel futuro!). Un buon codice è sempre ben commentato.
# Questo è un commento su singola riga
# I commenti iniziano con il simbolo #
eta = 18 # Puoi mettere commenti anche alla fine di una riga di codice
"""
Questo è un commento
su più righe, utile per
spiegazioni più lunghe
"""
# ATTENZIONE: i commenti NON vengono eseguiti
# print("Questo non verrà stampato")
print("Questo sì") # Solo questa riga viene eseguita
- Spiega il perché, non il cosa (il codice stesso mostra cosa fa)
- Mantieni i commenti aggiornati quando modifichi il codice
- Usa commenti per suddividere sezioni logiche del programma
- Evita commenti ovvi come:
x = 5 # assegno 5 a x
6. Input e Output
6.1 Output con print()
Abbiamo già visto print(), ma questa funzione ha molte più capacità di quanto sembri.
# Stampare più valori
nome = "Luca"
eta = 20
print("Mi chiamo", nome, "e ho", eta, "anni")
# Output: Mi chiamo Luca e ho 20 anni
# Usare f-strings (metodo moderno e consigliato)
print(f"Mi chiamo {nome} e ho {eta} anni")
# Stampare senza andare a capo
print("Prima parte", end=" ")
print("Seconda parte")
# Output: Prima parte Seconda parte
# Specificare un separatore diverso
print("Uno", "Due", "Tre", sep=" - ")
# Output: Uno - Due - Tre
Le f-strings (formatted string literals) sono il metodo più leggibile e performante per inserire variabili nelle stringhe. Si creano mettendo una f prima delle virgolette e usando {} per inserire le variabili:
prezzo = 19.99
quantita = 3
totale = prezzo * quantita
print(f"Prezzo unitario: €{prezzo}")
print(f"Quantità: {quantita}")
print(f"Totale: €{totale:.2f}") # .2f formatta con 2 decimali
# Output: Totale: €59.97
6.2 Input dall'utente con input()
La funzione input() permette al programma di ricevere dati dall'utente. Il programma si ferma e aspetta che l'utente digiti qualcosa e prema Invio.
# Input semplice
nome = input("Come ti chiami? ")
print(f"Ciao {nome}!")
# IMPORTANTE: input() restituisce SEMPRE una stringa!
eta_stringa = input("Quanti anni hai? ")
print(type(eta_stringa)) # Output: <class 'str'>
Dato che input() restituisce sempre una stringa, se vuoi fare calcoli matematici devi convertire il tipo:
# SBAGLIATO - tenterà di concatenare stringhe
eta = input("Quanti anni hai? ") # utente digita: 20
anni_futuri = eta + 5
# Errore! Non puoi sommare una stringa e un numero
# CORRETTO - conversione esplicita
eta = int(input("Quanti anni hai? ")) # converte in intero
anni_futuri = eta + 5
print(f"Tra 5 anni avrai {anni_futuri} anni") # Output: 25
7. Operatori aritmetici
Python supporta tutti gli operatori matematici standard, più alcuni operatori speciali.
| Operatore | Significato | Esempio | Risultato |
|---|---|---|---|
+ |
Addizione | 10 + 3 |
13 |
- |
Sottrazione | 10 - 3 |
7 |
* |
Moltiplicazione | 10 * 3 |
30 |
/ |
Divisione (risultato float) | 10 / 3 |
3.333... |
// |
Divisione intera | 10 // 3 |
3 |
% |
Modulo (resto) | 10 % 3 |
1 |
** |
Elevamento a potenza | 10 ** 3 |
1000 |
# Calcolo dell'area di un rettangolo
base = 5
altezza = 3
area = base * altezza
print(f"L'area del rettangolo è {area}") # Output: 15
# Convertire temperatura da Celsius a Fahrenheit
celsius = 25
fahrenheit = (celsius * 9/5) + 32
print(f"{celsius}°C = {fahrenheit}°F") # Output: 25°C = 77.0°F
# Verificare se un numero è pari (il resto della divisione per 2 è 0)
numero = 17
resto = numero % 2
print(f"Il resto è {resto}") # Output: 1 (quindi dispari)
# Calcolare interesse composto
capitale = 1000
tasso = 0.05 # 5%
anni = 3
montante = capitale * (1 + tasso) ** anni
print(f"Dopo {anni} anni: €{montante:.2f}") # Output: €1157.63
Come in matematica, Python segue un ordine di precedenza nelle operazioni:
- Parentesi:
() - Elevamento a potenza:
** - Moltiplicazione, divisione, modulo:
*,/,//,% - Addizione e sottrazione:
+,-
risultato = 2 + 3 * 4 # 14 (non 20!)
risultato = (2 + 3) * 4 # 20 (le parentesi hanno priorità)
risultato = 2 ** 3 ** 2 # 512 (elevamento a potenza associa da destra)
8. Operatori di assegnazione composti
Python offre operatori che combinano un'operazione con un'assegnazione, rendendo il codice più conciso.
| Operatore | Equivalente a | Esempio |
|---|---|---|
x += 5 |
x = x + 5 |
Incrementa x di 5 |
x -= 3 |
x = x - 3 |
Decrementa x di 3 |
x *= 2 |
x = x * 2 |
Raddoppia x |
x /= 4 |
x = x / 4 |
Divide x per 4 |
x //= 3 |
x = x // 3 |
Divisione intera per 3 |
x %= 5 |
x = x % 5 |
x diventa il resto della divisione per 5 |
x **= 2 |
x = x ** 2 |
Eleva x al quadrato |
# Esempio pratico: contatore
punteggio = 0
print(f"Punteggio iniziale: {punteggio}")
punteggio += 10 # prima azione
print(f"Dopo la prima azione: {punteggio}") # 10
punteggio += 5 # seconda azione
print(f"Dopo la seconda azione: {punteggio}") # 15
punteggio *= 2 # bonus doppio
print(f"Con bonus doppio: {punteggio}") # 30
9. Conversioni di tipo (Type Casting)
Spesso è necessario convertire un valore da un tipo a un altro. Python fornisce funzioni di conversione esplicite.
Funzioni di conversione principali
int(x)→ Converte x in un numero interofloat(x)→ Converte x in un numero decimalestr(x)→ Converte x in una stringabool(x)→ Converte x in un valore booleano
# Conversione da stringa a numero
testo_numero = "42"
numero = int(testo_numero)
print(numero + 8) # Output: 50
# Conversione da numero a stringa
eta = 25
messaggio = "Ho " + str(eta) + " anni"
print(messaggio) # Output: Ho 25 anni
# Conversione tra int e float
intero = 10
decimale = float(intero)
print(decimale) # Output: 10.0
decimale2 = 9.7
intero2 = int(decimale2) # ATTENZIONE: tronca, non arrotonda!
print(intero2) # Output: 9
# Conversione a booleano
print(bool(1)) # True
print(bool(0)) # False
print(bool("")) # False (stringa vuota)
print(bool("ciao")) # True (stringa non vuota)
Non tutte le conversioni sono possibili. Se provi a convertire una stringa non numerica in un numero, Python solleverà un errore:
# Questo causerà un errore!
numero = int("ciao") # ValueError: invalid literal for int()
# Funziona solo con stringhe che rappresentano numeri
numero_valido = int("123") # OK
numero_float = float("3.14") # OK
10. Funzioni built-in utili
Python include molte funzioni built-in (integrate nel linguaggio) pronte all'uso. Ecco le più importanti per iniziare:
| Funzione | Descrizione | Esempio |
|---|---|---|
len(x) |
Restituisce la lunghezza di x | len("Python") → 6 |
abs(x) |
Valore assoluto di x | abs(-10) → 10 |
round(x, n) |
Arrotonda x a n decimali | round(3.14159, 2) → 3.14 |
max(a, b, c, ...) |
Restituisce il valore massimo | max(5, 2, 9, 1) → 9 |
min(a, b, c, ...) |
Restituisce il valore minimo | min(5, 2, 9, 1) → 1 |
pow(x, y) |
x elevato alla y | pow(2, 3) → 8 |
help(x) |
Mostra la documentazione di x | help(print) |
# Esempi pratici
parola = "Programmazione"
print(f"La parola '{parola}' ha {len(parola)} lettere") # 14 lettere
temperatura = -5.7
print(f"Temperatura assoluta: {abs(temperatura)}") # 5.7
prezzo = 19.876
print(f"Prezzo arrotondato: €{round(prezzo, 2)}") # €19.88
voti = [18, 25, 30, 22, 28]
print(f"Voto massimo: {max(voti)}") # 30
print(f"Voto minimo: {min(voti)}") # 18
11. Il primo programma completo
Mettiamo insieme tutto ciò che abbiamo imparato in un programma completo e funzionale.
# Programma per calcolare l'Indice di Massa Corporea (IMC)
print("=" * 50)
print("CALCOLATORE IMC")
print("=" * 50)
print()
# Input dei dati dall'utente
nome = input("Come ti chiami? ")
peso = float(input("Inserisci il tuo peso in kg: "))
altezza = float(input("Inserisci la tua altezza in metri: "))
# Calcolo dell'IMC
imc = peso / (altezza ** 2)
# Arrotondamento a 2 decimali
imc_arrotondato = round(imc, 2)
# Output del risultato
print()
print("=" * 50)
print(f"Ciao {nome}!")
print(f"Il tuo IMC è: {imc_arrotondato}")
# Interpretazione del risultato
if imc < 18.5:
categoria = "Sottopeso"
elif imc < 25:
categoria = "Normopeso"
elif imc < 30:
categoria = "Sovrappeso"
else:
categoria = "Obesità"
print(f"Categoria: {categoria}")
print("=" * 50)
Esempio di esecuzione:
==================================================
CALCOLATORE IMC
==================================================
Come ti chiami? Marco
Inserisci il tuo peso in kg: 75
Inserisci la tua altezza in metri: 1.80
==================================================
Ciao Marco!
Il tuo IMC è: 23.15
Categoria: Normopeso
==================================================
1. Quale delle seguenti è una variabile valida in Python?
2. Qual è il risultato di: 10 // 3?
3. Cosa restituisce type("42")?
4. Qual è il risultato di: 2 + 3 * 4?
5. Cosa fa la funzione input()?
12. Best Practices e Consigli
- Nomi descrittivi: Usa nomi di variabili che spieghino il loro scopo (
eta_studenteè meglio dix) - Convenzione snake_case: Per le variabili in Python si usa lo snake_case:
nome_completo,prezzo_totale - Costanti in MAIUSCOLO: I valori che non cambiano si scrivono in maiuscolo:
PI_GRECO = 3.14159 - Spazi e leggibilità: Usa spazi intorno agli operatori:
x = 5 + 3invece dix=5+3 - Commenta il complesso: Spiega la logica complessa, non l'ovvio
- Una cosa alla volta: Ogni riga dovrebbe fare una cosa chiara
- Testa frequentemente: Esegui il codice spesso per verificare che funzioni come ti aspetti
- Confondere = con ==:
=è assegnazione,==è confronto - Dimenticare le virgolette:
print(Ciao)darà errore, serveprint("Ciao") - Dimenticare di convertire input:
input()restituisce sempre stringhe! - Sbagliare l'indentazione: Python usa l'indentazione per strutturare il codice
- Non leggere i messaggi di errore: Gli errori di Python sono informativi, leggili!
13. Esercizi Pratici
Esercizio 1 - Base: Scrivi un programma che chieda nome ed età all'utente e stampi: "Ciao [nome], tra 10 anni avrai [età+10] anni"
Esercizio 2 - Medio: Crea un convertitore di valuta che chieda un importo in Euro e lo converta in Dollari (usa il tasso: 1€ = 1.18$)
Esercizio 3 - Medio: Scrivi un programma che calcoli il perimetro e l'area di un rettangolo date base e altezza inserite dall'utente
Esercizio 4 - Avanzato: Crea un programma che calcoli il prezzo finale di un prodotto dopo aver applicato uno sconto percentuale. Chiedi all'utente il prezzo originale e la percentuale di sconto.
Esercizio 5 - Sfida: Scrivi un programma che calcoli quanti secondi ci sono in un certo numero di giorni, ore, minuti inseriti dall'utente
14. Risorse per approfondire
- Documentazione ufficiale: docs.python.org/it
- Tutorial interattivi: Cerca "Python tutorial" su piattaforme come Codecademy o freeCodeCamp
- Pratica: Risolvi problemi su HackerRank, LeetCode, o Codewars
- Comunità: Partecipa a forum come Stack Overflow o Reddit r/learnpython
Dopo aver padroneggiato questi concetti fondamentali, sarai pronto per affrontare:
- Strutture di controllo (if, elif, else)
- Cicli (while, for)
- Strutture dati (liste, tuple, dizionari, set)
- Funzioni
- Moduli e package
- Programmazione orientata agli oggetti